" ============================================================================
" FileName: mysql.vim
" Author: voldikss <dyzplus@gmail.com>
" GitHub: https://github.com/voldikss
" ============================================================================

let s:mysql_reserved_words = [
  \ 'accessible',
  \ 'account',
  \ 'action',
  \ 'active',
  \ 'add',
  \ 'admin',
  \ 'after',
  \ 'against',
  \ 'aggregate',
  \ 'algorithm',
  \ 'all',
  \ 'alter',
  \ 'always',
  \ 'analyse',
  \ 'analyze',
  \ 'and',
  \ 'any',
  \ 'array',
  \ 'as',
  \ 'asc',
  \ 'ascii',
  \ 'asensitive',
  \ 'at',
  \ 'autoextend_size',
  \ 'auto_increment',
  \ 'avg',
  \ 'avg_row_length',
  \ 'backup',
  \ 'before',
  \ 'begin',
  \ 'between',
  \ 'bigint',
  \ 'binary',
  \ 'binlog',
  \ 'bit',
  \ 'blob',
  \ 'block',
  \ 'bool',
  \ 'boolean',
  \ 'both',
  \ 'btree',
  \ 'buckets',
  \ 'by',
  \ 'byte',
  \ 'cache',
  \ 'call',
  \ 'cascade',
  \ 'cascaded',
  \ 'case',
  \ 'catalog_name',
  \ 'chain',
  \ 'change',
  \ 'changed',
  \ 'channel',
  \ 'char',
  \ 'character',
  \ 'charset',
  \ 'check',
  \ 'checksum',
  \ 'cipher',
  \ 'class_origin',
  \ 'client',
  \ 'clone',
  \ 'close',
  \ 'coalesce',
  \ 'code',
  \ 'collate',
  \ 'collation',
  \ 'column',
  \ 'columns',
  \ 'column_format',
  \ 'column_name',
  \ 'comment',
  \ 'commit',
  \ 'committed',
  \ 'compact',
  \ 'completion',
  \ 'component',
  \ 'compressed',
  \ 'compression',
  \ 'concurrent',
  \ 'condition',
  \ 'connection',
  \ 'consistent',
  \ 'constraint',
  \ 'constraint_catalog',
  \ 'constraint_name',
  \ 'constraint_schema',
  \ 'contains',
  \ 'context',
  \ 'continue',
  \ 'convert',
  \ 'cpu',
  \ 'create',
  \ 'cross',
  \ 'cube',
  \ 'cume_dist',
  \ 'current',
  \ 'current_date',
  \ 'current_time',
  \ 'current_timestamp',
  \ 'current_user',
  \ 'cursor',
  \ 'cursor_name',
  \ 'data',
  \ 'database',
  \ 'databases',
  \ 'datafile',
  \ 'date',
  \ 'datetime',
  \ 'day',
  \ 'day_hour',
  \ 'day_microsecond',
  \ 'day_minute',
  \ 'day_second',
  \ 'deallocate',
  \ 'dec',
  \ 'decimal',
  \ 'declare',
  \ 'default',
  \ 'default_auth',
  \ 'definer',
  \ 'definition',
  \ 'delayed',
  \ 'delay_key_write',
  \ 'delete',
  \ 'dense_rank',
  \ 'desc',
  \ 'describe',
  \ 'description',
  \ 'des_key_file',
  \ 'deterministic',
  \ 'diagnostics',
  \ 'directory',
  \ 'disable',
  \ 'discard',
  \ 'disk',
  \ 'distinct',
  \ 'distinctrow',
  \ 'div',
  \ 'do',
  \ 'double',
  \ 'drop',
  \ 'dual',
  \ 'dumpfile',
  \ 'duplicate',
  \ 'dynamic',
  \ 'each',
  \ 'else',
  \ 'elseif',
  \ 'empty',
  \ 'enable',
  \ 'enclosed',
  \ 'encryption',
  \ 'end',
  \ 'ends',
  \ 'enforced',
  \ 'engine',
  \ 'engines',
  \ 'enum',
  \ 'error',
  \ 'errors',
  \ 'escape',
  \ 'escaped',
  \ 'event',
  \ 'events',
  \ 'every',
  \ 'except',
  \ 'exchange',
  \ 'exclude',
  \ 'execute',
  \ 'exists',
  \ 'exit',
  \ 'expansion',
  \ 'expire',
  \ 'explain',
  \ 'export',
  \ 'extended',
  \ 'extent_size',
  \ 'failed_login_attempts',
  \ 'false',
  \ 'fast',
  \ 'faults',
  \ 'fetch',
  \ 'fields',
  \ 'file',
  \ 'file_block_size',
  \ 'filter',
  \ 'first',
  \ 'first_value',
  \ 'fixed',
  \ 'float',
  \ 'float4',
  \ 'float8',
  \ 'flush',
  \ 'following',
  \ 'follows',
  \ 'for',
  \ 'force',
  \ 'foreign',
  \ 'format',
  \ 'found',
  \ 'from',
  \ 'full',
  \ 'fulltext',
  \ 'function',
  \ 'general',
  \ 'generated',
  \ 'geomcollection',
  \ 'geometry',
  \ 'geometrycollection',
  \ 'get',
  \ 'get_format',
  \ 'get_master_public_key',
  \ 'global',
  \ 'grant',
  \ 'grants',
  \ 'group',
  \ 'grouping',
  \ 'groups',
  \ 'group_replication',
  \ 'handler',
  \ 'hash',
  \ 'having',
  \ 'help',
  \ 'high_priority',
  \ 'histogram',
  \ 'history',
  \ 'host',
  \ 'hosts',
  \ 'hour',
  \ 'hour_microsecond',
  \ 'hour_minute',
  \ 'hour_second',
  \ 'identified',
  \ 'if',
  \ 'ignore',
  \ 'ignore_server_ids',
  \ 'import',
  \ 'in',
  \ 'inactive',
  \ 'index',
  \ 'indexes',
  \ 'infile',
  \ 'initial_size',
  \ 'inner',
  \ 'inout',
  \ 'insensitive',
  \ 'insert',
  \ 'insert_method',
  \ 'install',
  \ 'instance',
  \ 'int',
  \ 'int1',
  \ 'int2',
  \ 'int3',
  \ 'int4',
  \ 'int8',
  \ 'integer',
  \ 'interval',
  \ 'into',
  \ 'invisible',
  \ 'invoker',
  \ 'io',
  \ 'io_after_gtids',
  \ 'io_before_gtids',
  \ 'io_thread',
  \ 'ipc',
  \ 'is',
  \ 'isolation',
  \ 'issuer',
  \ 'iterate',
  \ 'join',
  \ 'json',
  \ 'json_table',
  \ 'json_value',
  \ 'key',
  \ 'keys',
  \ 'key_block_size',
  \ 'kill',
  \ 'lag',
  \ 'language',
  \ 'last',
  \ 'last_value',
  \ 'lateral',
  \ 'lead',
  \ 'leading',
  \ 'leave',
  \ 'leaves',
  \ 'left',
  \ 'less',
  \ 'level',
  \ 'like',
  \ 'limit',
  \ 'linear',
  \ 'lines',
  \ 'linestring',
  \ 'list',
  \ 'load',
  \ 'local',
  \ 'localtime',
  \ 'localtimestamp',
  \ 'lock',
  \ 'locked',
  \ 'locks',
  \ 'logfile',
  \ 'logs',
  \ 'long',
  \ 'longblob',
  \ 'longtext',
  \ 'loop',
  \ 'low_priority',
  \ 'master',
  \ 'master_auto_position',
  \ 'master_bind',
  \ 'master_compression_algorithms',
  \ 'master_connect_retry',
  \ 'master_delay',
  \ 'master_heartbeat_period',
  \ 'master_host',
  \ 'master_log_file',
  \ 'master_log_pos',
  \ 'master_password',
  \ 'master_port',
  \ 'master_public_key_path',
  \ 'master_retry_count',
  \ 'master_server_id',
  \ 'master_ssl',
  \ 'master_ssl_ca',
  \ 'master_ssl_capath',
  \ 'master_ssl_cert',
  \ 'master_ssl_cipher',
  \ 'master_ssl_crl',
  \ 'master_ssl_crlpath',
  \ 'master_ssl_key',
  \ 'master_ssl_verify_server_cert',
  \ 'master_tls_ciphersuites',
  \ 'master_tls_version',
  \ 'master_user',
  \ 'master_zstd_compression_level',
  \ 'match',
  \ 'maxvalue',
  \ 'max_connections_per_hour',
  \ 'max_queries_per_hour',
  \ 'max_rows',
  \ 'max_size',
  \ 'max_updates_per_hour',
  \ 'max_user_connections',
  \ 'medium',
  \ 'mediumblob',
  \ 'mediumint',
  \ 'mediumtext',
  \ 'member',
  \ 'memory',
  \ 'merge',
  \ 'message_text',
  \ 'microsecond',
  \ 'middleint',
  \ 'migrate',
  \ 'minute',
  \ 'minute_microsecond',
  \ 'minute_second',
  \ 'min_rows',
  \ 'mod',
  \ 'mode',
  \ 'modifies',
  \ 'modify',
  \ 'month',
  \ 'multilinestring',
  \ 'multipoint',
  \ 'multipolygon',
  \ 'mutex',
  \ 'mysql_errno',
  \ 'name',
  \ 'names',
  \ 'national',
  \ 'natural',
  \ 'nchar',
  \ 'ndb',
  \ 'ndbcluster',
  \ 'nested',
  \ 'network_namespace',
  \ 'never',
  \ 'new',
  \ 'next',
  \ 'no',
  \ 'nodegroup',
  \ 'none',
  \ 'not',
  \ 'nowait',
  \ 'no_wait',
  \ 'no_write_to_binlog',
  \ 'nth_value',
  \ 'ntile',
  \ 'null',
  \ 'nulls',
  \ 'number',
  \ 'numeric',
  \ 'nvarchar',
  \ 'of',
  \ 'off',
  \ 'offset',
  \ 'oj',
  \ 'old',
  \ 'on',
  \ 'one',
  \ 'only',
  \ 'open',
  \ 'optimize',
  \ 'optimizer_costs',
  \ 'option',
  \ 'optional',
  \ 'optionally',
  \ 'options',
  \ 'or',
  \ 'order',
  \ 'ordinality',
  \ 'organization',
  \ 'others',
  \ 'out',
  \ 'outer',
  \ 'outfile',
  \ 'over',
  \ 'owner',
  \ 'pack_keys',
  \ 'page',
  \ 'parser',
  \ 'partial',
  \ 'partition',
  \ 'partitioning',
  \ 'partitions',
  \ 'password',
  \ 'password_lock_time',
  \ 'path',
  \ 'percent_rank',
  \ 'persist',
  \ 'persist_only',
  \ 'phase',
  \ 'plugin',
  \ 'plugins',
  \ 'plugin_dir',
  \ 'point',
  \ 'polygon',
  \ 'port',
  \ 'precedes',
  \ 'preceding',
  \ 'precision',
  \ 'prepare',
  \ 'preserve',
  \ 'prev',
  \ 'primary',
  \ 'privileges',
  \ 'privilege_checks_user',
  \ 'procedure',
  \ 'process',
  \ 'processlist',
  \ 'profile',
  \ 'profiles',
  \ 'proxy',
  \ 'purge',
  \ 'quarter',
  \ 'query',
  \ 'quick',
  \ 'random',
  \ 'range',
  \ 'rank',
  \ 'read',
  \ 'reads',
  \ 'read_only',
  \ 'read_write',
  \ 'real',
  \ 'rebuild',
  \ 'recover',
  \ 'recursive',
  \ 'redofile',
  \ 'redo_buffer_size',
  \ 'redundant',
  \ 'reference',
  \ 'references',
  \ 'regexp',
  \ 'relay',
  \ 'relaylog',
  \ 'relay_log_file',
  \ 'relay_log_pos',
  \ 'relay_thread',
  \ 'release',
  \ 'reload',
  \ 'remote',
  \ 'remove',
  \ 'rename',
  \ 'reorganize',
  \ 'repair',
  \ 'repeat',
  \ 'repeatable',
  \ 'replace',
  \ 'replicate_do_db',
  \ 'replicate_do_table',
  \ 'replicate_ignore_db',
  \ 'replicate_ignore_table',
  \ 'replicate_rewrite_db',
  \ 'replicate_wild_do_table',
  \ 'replicate_wild_ignore_table',
  \ 'replication',
  \ 'require',
  \ 'require_row_format',
  \ 'reset',
  \ 'resignal',
  \ 'resource',
  \ 'respect',
  \ 'restart',
  \ 'restore',
  \ 'restrict',
  \ 'resume',
  \ 'retain',
  \ 'return',
  \ 'returned_sqlstate',
  \ 'returning',
  \ 'returns',
  \ 'reuse',
  \ 'reverse',
  \ 'revoke',
  \ 'right',
  \ 'rlike',
  \ 'role',
  \ 'rollback',
  \ 'rollup',
  \ 'rotate',
  \ 'routine',
  \ 'row',
  \ 'rows',
  \ 'row_count',
  \ 'row_format',
  \ 'row_number',
  \ 'rtree',
  \ 'savepoint',
  \ 'schedule',
  \ 'schema',
  \ 'schemas',
  \ 'schema_name',
  \ 'second',
  \ 'secondary',
  \ 'secondary_engine',
  \ 'secondary_load',
  \ 'secondary_unload',
  \ 'second_microsecond',
  \ 'security',
  \ 'select',
  \ 'sensitive',
  \ 'separator',
  \ 'serial',
  \ 'serializable',
  \ 'server',
  \ 'session',
  \ 'set',
  \ 'share',
  \ 'show',
  \ 'shutdown',
  \ 'signal',
  \ 'signed',
  \ 'simple',
  \ 'skip',
  \ 'slave',
  \ 'slow',
  \ 'smallint',
  \ 'snapshot',
  \ 'socket',
  \ 'some',
  \ 'soname',
  \ 'sounds',
  \ 'source',
  \ 'spatial',
  \ 'specific',
  \ 'sql',
  \ 'sqlexception',
  \ 'sqlstate',
  \ 'sqlwarning',
  \ 'sql_after_gtids',
  \ 'sql_after_mts_gaps',
  \ 'sql_before_gtids',
  \ 'sql_big_result',
  \ 'sql_buffer_result',
  \ 'sql_cache',
  \ 'sql_calc_found_rows',
  \ 'sql_no_cache',
  \ 'sql_small_result',
  \ 'sql_thread',
  \ 'sql_tsi_day',
  \ 'sql_tsi_hour',
  \ 'sql_tsi_minute',
  \ 'sql_tsi_month',
  \ 'sql_tsi_quarter',
  \ 'sql_tsi_second',
  \ 'sql_tsi_week',
  \ 'sql_tsi_year',
  \ 'srid',
  \ 'ssl',
  \ 'stacked',
  \ 'start',
  \ 'starting',
  \ 'starts',
  \ 'stats_auto_recalc',
  \ 'stats_persistent',
  \ 'stats_sample_pages',
  \ 'status',
  \ 'stop',
  \ 'storage',
  \ 'stored',
  \ 'straight_join',
  \ 'stream',
  \ 'string',
  \ 'subclass_origin',
  \ 'subject',
  \ 'subpartition',
  \ 'subpartitions',
  \ 'super',
  \ 'suspend',
  \ 'swaps',
  \ 'switches',
  \ 'system',
  \ 'table',
  \ 'tables',
  \ 'tablespace',
  \ 'table_checksum',
  \ 'table_name',
  \ 'temporary',
  \ 'temptable',
  \ 'terminated',
  \ 'text',
  \ 'than',
  \ 'then',
  \ 'thread_priority',
  \ 'ties',
  \ 'time',
  \ 'timestamp',
  \ 'timestampadd',
  \ 'timestampdiff',
  \ 'tinyblob',
  \ 'tinyint',
  \ 'tinytext',
  \ 'tls',
  \ 'to',
  \ 'trailing',
  \ 'transaction',
  \ 'trigger',
  \ 'triggers',
  \ 'true',
  \ 'truncate',
  \ 'type',
  \ 'types',
  \ 'unbounded',
  \ 'uncommitted',
  \ 'undefined',
  \ 'undo',
  \ 'undofile',
  \ 'undo_buffer_size',
  \ 'unicode',
  \ 'uninstall',
  \ 'union',
  \ 'unique',
  \ 'unknown',
  \ 'unlock',
  \ 'unsigned',
  \ 'until',
  \ 'update',
  \ 'upgrade',
  \ 'usage',
  \ 'use',
  \ 'user',
  \ 'user_resources',
  \ 'use_frm',
  \ 'using',
  \ 'utc_date',
  \ 'utc_time',
  \ 'utc_timestamp',
  \ 'validation',
  \ 'value',
  \ 'values',
  \ 'varbinary',
  \ 'varchar',
  \ 'varcharacter',
  \ 'variables',
  \ 'varying',
  \ 'vcpu',
  \ 'view',
  \ 'virtual',
  \ 'visible',
  \ 'wait',
  \ 'warnings',
  \ 'week',
  \ 'weight_string',
  \ 'when',
  \ 'where',
  \ 'while',
  \ 'window',
  \ 'with',
  \ 'without',
  \ 'work',
  \ 'wrapper',
  \ 'write',
  \ 'x509',
  \ 'xa',
  \ 'xid',
  \ 'xml',
  \ 'xor',
  \ 'year',
  \ 'year_month',
  \ 'zerofill'
  \ ]

function! coc#source#mysql#init() abort
  return {
    \ 'priority': 99,
    \ 'shortcut': 'MYSQL',
    \ 'filetypes': ['mysql', 'sql'],
    \ 'triggerCharacters': ['']
    \ }
endfunc

function! coc#source#mysql#complete(opt, cb) abort
  call a:cb(s:mysql_reserved_words)
endfunc
